package com.sheng.leetcode.year2023.month10.day09;

import org.junit.Test;

import java.util.Arrays;

/**
 * @author by ls
 * @date 2023/10/9
 * <p>
 * 2578. 最小和分割<p>
 * <p>
 * 给你一个正整数 num ，请你将它分割成两个非负整数 num1 和 num2 ，满足：<p>
 * num1 和 num2 直接连起来，得到 num 各数位的一个排列。<p>
 * 换句话说，num1 和 num2 中所有数字出现的次数之和等于 num 中所有数字出现的次数。<p>
 * num1 和 num2 可以包含前导 0 。<p>
 * 请你返回 num1 和 num2 可以得到的和的 最小 值。<p>
 * 注意：<p>
 * num 保证没有前导 0 。<p>
 * num1 和 num2 中数位顺序可以与 num 中数位顺序不同。<p>
 * <p>
 * 示例 1：<p>
 * 输入：num = 4325<p>
 * 输出：59<p>
 * 解释：我们可以将 4325 分割成 num1 = 24 和 num2 = 35 ，和为 59 ，59 是最小和。<p>
 * <p>
 * 示例 2：<p>
 * 输入：num = 687<p>
 * 输出：75<p>
 * 解释：我们可以将 687 分割成 num1 = 68 和 num2 = 7 ，和为最优值 75 。<p>
 * <p>
 * 提示：<p>
 * 10 <= num <= 10^9<p>
 */
public class LeetCode2578 {

    @Test
    public void test01() {
//        int num = 4325;
        int num = 687;
        System.out.println(new Solution().splitNum(num));
    }
}

class Solution {
    public int splitNum(int num) {
        // 将 num 打乱顺序分隔成两个数字，保证这两个数字之和最小
        int num1 = 0, num2 = 0;
        String str = String.valueOf(num);
        String[] split = str.split("");
        Arrays.sort(split);
        for (int i = 0; i < split.length; i++) {
            if (i % 2 == 0) {
                num1 = num1 * 10 + Integer.parseInt(split[i]);
            } else {
                num2 = num2 * 10 + Integer.parseInt(split[i]);
            }
        }
        return num1 + num2;
    }
}
